攻防兩邊都在翻同一份文件,只是角度不同。
所以今天這篇要介紹的,是一個能讓藍隊、紅隊都受益的 AI 工具組合:
RAGFlow + Ollama。
我把所有 ISMS 文件丟進本地 RAG,讓 AI 幫我回答:
「這個事件/弱點對應哪條控制?」
從此不用再翻厚厚的手冊,也不怕誤對錯章。
角色 | 使用情境 | 效益 |
---|---|---|
🔵 藍隊(內部稽核) | 快速查找控制項對應文件、生成稽核回覆 | 節省比對時間、提升一致性 |
🔴 紅隊(技術檢測) | 自動對照弱點 → 控制項 → 改善依據 | 報告標準化、減少人為誤差 |
🟢 顧問 / 教育訓練 | 對照 ISO 條文與實務案例 | 教學更直覺、查詢更即時 |
flowchart TD
A[ISMS 文件] --> B[文字切分]
B --> C[向量化上傳 RAGFlow]
C --> D[RAGFlow 問答 API]
D --> E[對話介面]
E --> F[Ollama LLM]
F --> G[使用者查詢控制項]
不論是稽核或檢測,最大的時間黑洞在於:
AI 可以在這裡發揮價值 ——
它不判斷合不合規,而是幫你快速 對應控制 → 找出證據。
我只需要問:「供應商沒輪替憑證,對應哪項控制?」
RAGFlow + Ollama 就能回「A.14.2.7 Supplier service delivery management」,並列出文件出處。
./isms_docs/
。使用 Python 小程式 isms_to_chunks.py
:
import os, json, uuid
from pathlib import Path
from datetime import datetime
from pdfminer.high_level import extract_text
import docx
DOC_DIR = Path("./isms_docs")
OUT_FILE = Path("isms_chunks.jsonl")
CHUNK_SIZE = 800
CHUNK_OVERLAP = 100
def text_from_pdf(path):
return extract_text(path)
def text_from_docx(path):
doc = docx.Document(path)
return "\n".join(p.text for p in doc.paragraphs)
def chunk_text(text, size=CHUNK_SIZE, overlap=CHUNK_OVERLAP):
i = 0
chunks = []
while i < len(text):
chunk = text[i:i+size]
chunks.append(chunk.strip())
i += size - overlap
return chunks
with OUT_FILE.open("w", encoding="utf-8") as out:
for f in DOC_DIR.iterdir():
if f.suffix.lower() in [".pdf"]:
txt = text_from_pdf(str(f))
elif f.suffix.lower() in [".docx", ".doc"]:
txt = text_from_docx(str(f))
elif f.suffix.lower() in [".txt"]:
txt = f.read_text(encoding="utf-8")
else:
continue
chunks = chunk_text(txt)
for idx, c in enumerate(chunks):
doc = {
"id": str(uuid.uuid4()),
"source": f.name,
"chunk_index": idx,
"text": c,
"timestamp": datetime.utcnow().isoformat() + "Z"
}
out.write(json.dumps(doc, ensure_ascii=False) + "\n")
curl -X POST "http://localhost:3000/api/documents/bulk_import" \
-H "Content-Type: application/jsonl" \
--data-binary @isms_chunks.jsonl
上傳後,RAGFlow 會自動向量化並建立可搜尋的索引。
System Prompt 範例:
你是 ISMS 查詢助理。
使用者會提供一段情境,例如「供應商未輪替憑證」。
請回答:
1) 對應的 ISO/ISMS 控制項代號與名稱。
2) 一句理由(2–3 行)。
3) 提供引用來源(檔名 + chunk index + 摘錄 100 字內)。
禁止捏造條號。
User Prompt 範例:
外包廠商沒有在期限內替換到期憑證,違反哪個 ISMS 控制?
User: 第三方供應商未更新 TLS 憑證
Assistant:
對應控制項:A.14.2.7 Supplier service delivery management
理由: 憑證更新屬於供應商服務交付之安全責任。
引用:
ThirdParty_SLA.docx (chunk 3)
:「供應商應於憑證到期前 30 日完成更新...」ISMS_Policy.pdf (chunk 11)
:「外部合作廠商需遵守資訊安全憑證政策...」
flowchart TD
A[ISMS 文件庫] --> B[藍隊稽核查詢]
A --> C[紅隊報告對應控制]
B --> D[AI 回覆:控制 + 出處]
C --> D
這也是我每天的訓練方式:
flowchart TD
A[白天:藍隊稽核 / 防守] --> B[盤點弱點報告]
B --> C[轉化成防守需求]
C --> D[晚上:紅隊模擬 / 攻擊]
D --> E[彙整報告 + 控制對照]
E --> F[回饋藍隊強化防禦]
F --> A
AI 幫我串起這個循環 ——
白天學到的漏洞對應控制,晚上用來驗證攻擊面;
晚上發現的新弱點,隔天再讓 AI 幫我找對應控制條款與改善建議。
攻與防互為鏡像。AI 讓螺旋式成長真正落地。
問題 | 解法 |
---|---|
LLM 胡亂產生控制號 | 明確禁止生成條號、限制回答引用文件 |
敏感文件外洩風險 | 全程本地化(Ollama + RAGFlow),先做脫敏處理 |
查詢結果不穩 | 微調 chunk size(600–1000字),top_k = 5–8 |
文件更新不同步 | 版本控制 + 再次向量化(建議定期自動化) |
自動生成稽核回覆句式
「本項控制已落實,透過 AD 登錄機制與日誌記錄。」
紅隊報告模板整合
將 AI 回傳控制項直接嵌入報告欄位,標準化輸出格式。
多語言對應(中英)
RAGFlow 支援中文文件、英文條文並存,
查詢可同時回傳中英對照版本。
只要文件整理好,
RAGFlow + Ollama 就能幫你把「文件堆」變成「查詢助理」。
不論你是藍隊還是紅隊,一句話找到對應控制項。